package info.opencards.md; import com.sun.javafx.application.PlatformImpl; import javafx.application.Platform; import javafx.collections.ObservableList; import javafx.embed.swing.JFXPanel; import javafx.scene.Group; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import javafx.stage.Stage; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; // Adopted from https://gist.github.com/anjackson/1640654 // see http://docs.oracle.com/javafx/2/webview/jfxpub-webview.htm public class SwingFXWebView extends JPanel { private JFXPanel jfxPanel; private JButton swingButton; private WebEngine webEngine; public SwingFXWebView() { initComponents(); } public static void main(String... args) { // Run this later: SwingUtilities.invokeLater(new Runnable() { @Override public void run() { final JFrame frame = new JFrame(); frame.getContentPane().add(new SwingFXWebView()); frame.setMinimumSize(new Dimension(640, 480)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }); } private void initComponents() { jfxPanel = new JFXPanel(); createScene(); setLayout(new BorderLayout()); add(jfxPanel, BorderLayout.CENTER); swingButton = new JButton(); swingButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Platform.runLater(new Runnable() { @Override public void run() { webEngine.reload(); } }); } }); swingButton.setText("Reload"); add(swingButton, BorderLayout.SOUTH); } /** * createScene * <p/> * Note: Key is that Scene needs to be created and run on "FX user thread" NOT on the AWT-EventQueue Thread */ private void createScene() { PlatformImpl.startup(new Runnable() { @Override public void run() { Stage stage; WebView browser; stage = new Stage(); stage.setTitle("Hello Java FX"); stage.setResizable(true); Group root = new Group(); Scene scene = new Scene(root, 80, 20); stage.setScene(scene); // Set up the embedded browser: browser = new WebView(); webEngine = browser.getEngine(); // webEngine.load("http://heise.de"); // ScrollPane scrollPane = new ScrollPane(); // scrollPane.setContent(browser); webEngine.loadContent("<b>asdf</b>"); // root.getChildren().addAll(scrollPane); // scene.setRoot(root); // stage.setScene(scene); ObservableList<Node> children = root.getChildren(); children.add(browser); jfxPanel.setScene(scene); } }); } }